package com.zhangwei.day31volley;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v4.util.LruCache;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.widget.ImageView;

import com.alibaba.fastjson.JSON;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.zhangwei.day31volley.request.GsonRequest;
import com.zhangwei.day31volley.utils.AppImageCache;

import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

/**
 * activity FragmentActivity ActionBarActivity AppcomentActivity
 * 简介  : Volley是谷歌2013I/O大会上推出的一套解决移动端与服务器通信的框架
 * 主要功能
 * 1> json数据加载,图片异步下载
 * 2> 缓存功能
 * 3> 跟Activity的生命周期联动
 * 4> 网络请求排序
 * 重要类
 * Volley
 * 加载数据Request
 * 1>StringRequest
 * 2>JsonRequest
 * 2.1>JsonObjectRequest
 * 2.2>JsonArrayRequest
 * 3>ImageRequest
 * 图片异步下载功能
 * ImageLoader
 * NetworkImageView
 */

public class MainActivity extends ActionBarActivity {
    private RequestQueue queue;
    private String url = "http://www.0790tg.com/appapi/api.php?s=/Tuan/typeList&type=1";
    private ImageView img;
    private String imageUrl = "http://v1.qzone.cc/avatar/201308/30/22/56/5220b2828a477072.jpg%21200x200.jpg";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        img = (ImageView) this.findViewById(R.id.img);


//        stringRequestMethod();
//        imageRequestMethod();

        imageLoaderMethod();


    }

    /**
     * 第一步  初始化请求队列
     * 第二步  创建请求
     * 第三步  添加请求
     * 第四步  取消请求
     */
    private void stringRequestMethod() {
        //初始化请求队列
        queue = Volley.newRequestQueue(this);
        /**
         * 初始化请求
         * 参数一 请求方式
         * 参数二  url
         * 参数三 成功的回调接口
         * 参数四 错误的回调接口
         */
        StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.e("response", response);

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                HashMap<String, String> params = new HashMap<>();
                params.put("name", "wh1501");
                params.put("pwd", "123");
                return params;
            }
        };
        //设置缓存数据
        request.setShouldCache(true);
        //设置tag方便取消此请求
        request.setTag(this);
        queue.add(request);
        //2
//        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id
//                .text1, list);


    }

    private void jsonObjectMethod() {
        queue = Volley.newRequestQueue(this);

        User user = new User();
        user.setName("wh1501");
        user.setPwd("123");

//        "user" , json数据 user

        String json = JSON.toJSONString(user);
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, "", json, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });

        request.setTag(this);
        queue.add(request);
    }


//    RGB-565     1280*720*2 =
//    ARGB-8888   1280*720*4 =

    /**
     * 适合单张图片下载
     */
    private void imageRequestMethod() {
        queue = Volley.newRequestQueue(this);
        /**
         * 参数一 图片url
         * 参数二 成功的回调方法
         * 参数三 图片的最大宽度
         * 参数四 图片的最大高度
         * 参数五 图片显示的类型
         * 参数六 图片显示的质量
         * 参数七 请求错误的回调接口
         *
         */
        ImageRequest request = new ImageRequest("http://v1.qzone.cc/avatar/201308/30/22/56/5220b2828a477072.jpg%21200x200.jpg", new Response.Listener<Bitmap>() {
            @Override
            public void onResponse(Bitmap response) {
                img.setImageBitmap(response);
            }
        }, 300, 300, ImageView.ScaleType.FIT_XY, Bitmap.Config.RGB_565, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
        request.setShouldCache(true);
        request.setTag(this);
        queue.add(request);
    }


//        LruCache<String,Bitmap> lruCache
    //内存缓存 lruCache
//            SoftReference<Bitmap>
    //磁盘缓存  File


    /**
     * 第一步 初始化 请求队列
     * 第二步 初始化ImageLoader
     * 第三步 初始化ImageLinstener
     * 第四步 调用imageloader的get方法
     */
    public void imageLoaderMethod() {
        queue = Volley.newRequestQueue(this);
        final LruCache<String, Bitmap> cache = new LruCache<String, Bitmap>(4 * 1024 * 1204) {
            //默认返回 item的个数
            @Override
            protected int sizeOf(String key, Bitmap value) {
                //返回图片的大小
                return value.getRowBytes() * value.getHeight();
            }
        };
        ImageLoader loader = new ImageLoader(queue, new ImageLoader.ImageCache() {
            @Override
            public Bitmap getBitmap(String url) {
                return cache.get(url);
            }

            @Override
            public void putBitmap(String url, Bitmap bitmap) {
                cache.put(url, bitmap);
            }
        });
        /**
         * 参数一  imagview
         * 参数   加载时默认显示的图片
         * 参数三  下载图片错误时显示的图片
         */
        ImageLoader.ImageListener listener = ImageLoader.getImageListener(img, R.mipmap.ic_launcher, R.mipmap.ic_launcher);
        loader.get(imageUrl, listener);
    }

    /**
     *
     */
    private void networkMethod() {
        queue = Volley.newRequestQueue(this);
        NetworkImageView img = (NetworkImageView) findViewById(R.id.networkImageView);
        ImageLoader imageLoader = new ImageLoader(queue, AppImageCache.getInstance());
        img.setTag(imageUrl);
        img.setDefaultImageResId(R.mipmap.ic_launcher);
        img.setErrorImageResId(R.mipmap.ic_launcher);
        img.setImageUrl(imageUrl, imageLoader);
    }

    /**
     * 自定Request的使用
     */
    private void gsonRequestMethod() {
        GsonRequest<User> request = new GsonRequest<User>(url, User.class, new Response.Listener<User>() {
            @Override
            public void onResponse(User response) {

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        //取消请求
        queue.cancelAll(this);
    }
}
